iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

和地鼠做30天好朋友系列 第 8

地鼠,幫圖片加亮一點吧

  • 分享至 

  • xImage
  •  

最近看到一個地方:https://pkg.go.dev/std
感覺有很多神奇的東西與有趣好玩的東東可以討論

未來30天應該還有很多可以寫的材料囉,yo!
總之還是希望可以在這繁忙之餘,能完成這個自我挑戰、彌補過去兩年沒有完成的遺憾。

圖片常常在我們日常生活中所看到,現代人也越來越不喜歡看文字了...剛剛貼的網址當中,你應該會注意到有一個std 的 lib , 那就是 「image」

人如其名,當然那就是來處理圖片的部分囉,讓我們來看看這個 library 可以怎麼玩~

package main

import (
    "fmt"
    "os"
    "image"
    _ "image/jpeg"
)

func main() {
    file, err := os.Open("example.jpeg")
    if err != nil {
        fmt.Println("無法打開圖片:", err)
        return
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println("無法解碼圖片:", err)
        return
    }

    fmt.Println("圖片寬度:", img.Bounds().Dx())
    fmt.Println("圖片高度:", img.Bounds().Dy())
}

自行準備一下example.jpg,應該就能看到這圖片的寬度與高度...

https://ithelp.ithome.com.tw/upload/images/20230905/20106999fjoR0nXKPA.jpg

接下來,我們看看能不能對這個example.jpeg做一點特殊處理,例如:加高亮度

package main

import (
    "fmt"
    "os"
    "image"
    "image/color"
    "image/draw"
    "image/jpeg"
)

func main() {
    file, err := os.Open("example.jpeg")
    if err != nil {
        fmt.Println("無法打開圖片:", err)
        return
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println("無法解碼圖片:", err)
        return
    }

    // 創建一個新的圖片,與原始圖片尺寸相同
    editedImg := image.NewRGBA(img.Bounds())

    // 調整亮度
    brightness := 100
    draw.Draw(editedImg, editedImg.Bounds(), img, image.Point{}, draw.Src)
    for y := editedImg.Bounds().Min.Y; y < editedImg.Bounds().Max.Y; y++ {
        for x := editedImg.Bounds().Min.X; x < editedImg.Bounds().Max.X; x++ {
            c := editedImg.At(x, y).(color.RGBA)
            c.R = uint8(clamp(int(c.R) + brightness))
            c.G = uint8(clamp(int(c.G) + brightness))
            c.B = uint8(clamp(int(c.B) + brightness))
            editedImg.Set(x, y, c)
        }
    }

    // 保存修改後的圖片
    output, err := os.Create("edited.jpg")
    if err != nil {
        fmt.Println("無法創建輸出文件:", err)
        return
    }
    defer output.Close()

    err = jpeg.Encode(output, editedImg, nil)
    if err != nil {
        fmt.Println("無法編碼圖片:", err)
        return
    }

    fmt.Println("圖片處理完成,已保存為 edited.jpg")
}

func clamp(x int) int {
    if x < 0 {
        return 0
    }
    if x > 255 {
        return 255
    }
    return x
}

接下來,你就會看到edited.jpg 這個檔案,就可以看到提高亮度後的圖片啦

https://ithelp.ithome.com.tw/upload/images/20230905/20106999pvkrhCGbEC.jpg


上一篇
地鼠愛文件
下一篇
地鼠和JSON
系列文
和地鼠做30天好朋友12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言